package src.itheima03;

import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;

/*
    LinkedHashMap存储自定义Student对象并遍历        ---第二种方式: 根据键值对 增强for
    步骤:
        1.创建标准的Student类
        2.创建LinkedHashMap集合对象,键: Student 值: String 地址
        3.LinkedHashMap集合对象调用put方法,添加多个键值对
        4.LinkedHashMap集合对象调用entrySet方法,获取所有的键值对(Entry对象)对应的Set集合
        5.遍历所有所有的键值对(Entry对象)对应的Set集合
        6.获取当前的键值对对象
        7.键值对对象调用getKey方法,获取键
        8.键值对对象调用getValue方法,获取值
        9.打印键和值

     java.util.LinkedHashMap<K,V>集合
            特点:
                1.具备哈希特性+链表特性: 针对键
                2.哈希特性: 唯一,无索引
                3.链表特性: 有序
                3.要求: 键所属的类,覆盖重写hashCode方法和equals方法
    键相同,值被替换
 */
public class Demo04LinkedHashMapEach {
    public static void main(String[] args) {
        //2.创建LinkedHashMap集合对象,键: Student 值: String 地址
        LinkedHashMap<Student,String> map = new LinkedHashMap<>();

        //3.LinkedHashMap集合对象调用put方法,添加多个键值对
        map.put(new Student("柳岩",18),"北京");
        map.put(new Student("柳岩",18),"上海");
        map.put(new Student("刘德华",28),"香港");
        map.put(new Student("刘德华",28),"广州");
        map.put(new Student("王宝强",20),"河北");
        map.put(new Student("王宝强",20),"山东");

        //4.LinkedHashMap集合对象调用entrySet方法,获取所有的键值对(Entry对象)对应的Set集合
        Set<Map.Entry<Student,String>> set = map.entrySet();

        //5.遍历所有所有的键值对(Entry对象)对应的Set集合
        for(Map.Entry<Student,String> entry : set) {
            //6.获取当前的键值对对象: entry
            //7.键值对对象调用getKey方法,获取键
            Student key = entry.getKey();

            //8.键值对对象调用getValue方法,获取值
            String value = entry.getValue();

            //9.打印键和值
            /*System.out.println(key+"::::"+value);*/

            System.out.println(entry);

        }
    }
}
